package accesoremotoservidor;

import accesoremotoinvitado.*;
import gestorBD.Controlador;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Vector;

public class ControladorCitasRemoto extends UnicastRemoteObject implements CitaInterfazRemota {

    private Vector listaDeInvitados;

    public Vector getListaDeInvitados() {
        return listaDeInvitados;
    }

    public ControladorCitasRemoto() throws RemoteException {
        super();
        listaDeInvitados = new Vector();
    }

    @Override
    public byte verificarEnElSistema(long cedula) throws RemoteException {
        return Controlador.comprobarCedula(cedula);

    }

    @Override
    public synchronized String pedirUnaCita(String nombreDelInvitado, byte motivoCita, long cedulaDelInvitado) throws RemoteException {
        byte codigoBusqueda = verificarEnElSistema(cedulaDelInvitado);
        if (codigoBusqueda == 0) {
            if (Controlador.registrarCita(nombreDelInvitado, motivoCita, cedulaDelInvitado) == true) {
                return recordarCita(cedulaDelInvitado);
            } else {
                return "Todos los funcionarios tienen su agenda llena.";
            }
        } else if (codigoBusqueda == 1) {
            return "Usted ya tiene una cita. Puede recordarla utiilzando la opción \"Consultar mi cita\"";
        } else {
            return "Usted ya se encuentra en el sistema.";
        }
    }

    @Override
    public String recordarCita(long cedula) throws RemoteException {
        return Controlador.recordarCita(cedula);
    }

    @Override
    public synchronized void registrarParaCallback(InvitadoInterface objetoCliente) {
        if (!(listaDeInvitados.contains(objetoCliente))) {
            listaDeInvitados.addElement(objetoCliente);
        }
    }

    @Override
    public synchronized void desRegistrarParaCallback(InvitadoInterface objetoCliente) {
        listaDeInvitados.removeElement(objetoCliente);
    }
}
